package com.ray.auth.system.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.ray.auth.system.table.entity.Organization;
import com.zjhc.flyhong.common.datastructure.TreeNode;
import com.zjhc.flyhong.common.function.operator.LoginUser;
import com.zjhc.flyhong.common.function.operator.PageDto;
import com.zjhc.flyhong.common.web.Result;

/**
 * <h1>组织服务  服务接口</h1>
 * @创建人 ray
 * @创建时间 2017-06-10
 * @版本 1.0
 * @重要修改备注 
 * 
 */
@Service
public interface OrganizationService {
     /**
      * 通过租户ID获取 组织信息
      * @param tenantId 租户ID
      * @return 组织信息
      */
	Organization queryOrgByTenantId(String tenantId);
	/**
     * 通过用户ID获取 组织信息
     * @param userId 用户ID
     * @return 组织信息
     */
	Organization queryOrgByUser(String userId);
	/**
     * 通过组织ID获取 组织信息
     * @param orgCode 组织编号
     * @return 组织信息
     */
	Organization queryOrgByOrgCode(String orgCode);
	/**
	 * 查询所有租户
	 * @param params 查询参数
	 * @param page 分页信息
	 * @param loginUser 登录用户
	 * @return
	 */
	PageDto<Organization> queryTenantList(Organization params, PageDto<Organization> page, LoginUser loginUser);
	
	/**
	 * 查询所有部门
	 * @param params 查询参数
	 * @param page 分页信息
	 * @param loginUser 登录用户
	 * @return
	 */
	PageDto<Organization> queryOrgList(Organization params, PageDto<Organization> page, LoginUser loginUser);
	/**
	 * 新增一个组织数据
	 * @param params 新增对象
	 * @param type 组织类型  租户或者部门
	 * @param loginUser 操作用户
	 * @return
	 */
	Result<Object> addOrganization(Organization params, String type, LoginUser loginUser);
	/**
	 * 修改一个组织数据
	 * @param params 新增对象
	 * @param type 组织类型  租户或者部门
	 * @param loginUser 操作用户
	 * @return
	 */
	Result<Object> updateOrganization(Organization params, String type, LoginUser loginUser);
	/**
	 * 通过主键删除数据
	 * @param id 主键
	 * @param loginUser 操作用户
	 * @return
	 */
	Result<Object> deleteOrganization(String id, LoginUser loginUser);
	/**
	 * 组织树
	 * @param id 上级ID
	 * @param level
	 * @param loginUser
	 * @return
	 */
	List<TreeNode> queryOrgListByParentId(String id, Integer level, LoginUser loginUser);
	/**
	 * 查询组织
	 * @param id
	 * @param user
	 * @return
	 */
	Organization queryOrg(String id, LoginUser user);
	/**
	 * 查询所有组织
	 * @param user
	 * @return
	 */
	List<Organization> queryAll(LoginUser user);
	
	
}
